//package com.yunhe.spo.provider;
//
//import com.alibaba.fastjson.JSON;
//import com.yunhe.common.exception.code.ErrorCode;
//import com.yunhe.common.model.ResultObject;
//import org.springframework.common.netflix.zuul.filters.route.FallbackProvider;
//import org.springframework.http.HttpHeaders;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.MediaType;
//import org.springframework.http.client.ClientHttpResponse;
//import org.springframework.stereotype.Component;
//
//import java.io.ByteArrayInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//
///**
// * Hystrix熔断降级定义
// * @author liuronglei
// */
//@Component
//public class ServerFallback implements FallbackProvider {
//    @Override
//    public String getRoute() {
//        // api服务id，如果需要所有调用都支持回退，则return "*"或return null
//        return null;
//    }
//    /**
//     * 如果请求用户服务失败，返回什么信息给消费者客户端
//     */
//    @Override
//    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
//        return new ClientHttpResponse(){
//            @Override
//            public InputStream getBody() throws IOException {
//                ResultObject resultObject = new ResultObject(ErrorCode.CODE.HYSTRIX_ERROR.value(), "网关熔断");
//                String json = JSON.toJSONString(resultObject);
//                return new ByteArrayInputStream(json.getBytes("UTF-8"));
//                /*
//                JSONObject r = new JSONObject();
//                r.put("state", "9999");
//                r.put("msg", "网关熔断，请求失败");
//                return new ByteArrayInputStream(r.toJSONString().getBytes("UTF-8"));
//                */
//            }
//
//            @Override
//            public HttpHeaders getHeaders() {
//                HttpHeaders headers = new HttpHeaders();
//                // 和body中的内容编码一致，否则容易乱码
//                headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
//                return headers;
//            }
//
//            /**
//             * 网关向api服务请求是失败了，但是消费者客户端向网关发起的请求是OK的，
//             * 不应该把api的404,500等问题抛给客户端
//             * 网关和api服务集群对于客户端来说是黑盒子
//             */
//            @Override
//            public HttpStatus getStatusCode() throws IOException {
//                return HttpStatus.OK;
//            }
//
//            @Override
//            public int getRawStatusCode() throws IOException {
//                return HttpStatus.OK.value();
//            }
//
//            @Override
//            public String getStatusText() throws IOException {
//                return HttpStatus.OK.getReasonPhrase();
//            }
//
//            @Override
//            public void close() {
//            }
//        };
//    }
//}
